/**
 * 插入排序代码示例
 * @authur: 杨亚旭 891217573@qq.com
 * @date: 2019/3/18 17:05
 **/
public class InsertSort {


    /**
      *
      * 插入排序代码示例
      * 原理：拿指定的一个值开始，比他们前的数据，是从最后一位开始的，
      *  如果大于自己，那是符合条件的，那就放在后面，
      *  如果小于自己，那说明自己应该放在这个小于自己的后面，然后开始下一轮循环
      * @author: 杨亚旭 891217573@qq.com
      * @date: 2019/3/18 17:10
      * @param array 需要排序的数组
      * @param first 需要排序的元素开始下标
      * @param last 需要排序的元素结束下标
      *
      **/
    public static void insertSort(int[] array,int first,int last){
        int temp,j;
        //i:初始值+1
        int i=first+1;
        for(;i<=last-1;i++){
            //每次循环的临时值就是要比较的i下标值
            temp=array[i];
            //j值的初始值是i值-1，在下面的while循环内 需要 j值大于开始值，然后里面的业务代码是 --
            j=i-1;
            //假如下面括号的值一直为true 也就是说最大可循环i次。
            while (j>=first && array[j]>temp){
                array[j+1]= array[j];
                j--;
            }
            array[j+1]=temp;
        }
    }

    public static void main(String[] args) {
        int[] ints={10,3,4,42,11,2};
        //代表该数组全部位置进行排序
        insertSort(ints,0,ints.length);
        for(int val:ints){
            System.out.println("值:"+val);
        }
    }

}
